Python va InfluxDB yordamida vaqt qatorlari ma'lumotlarini samarali boshqarish, saqlash va tahlil qilishni o'rganing. Ushbu qo'llanma sozlash, ma'lumotlar yozish, Flux orqali so'rovlar va ishlab chiquvchilar uchun eng yaxshi amaliyotlarni qamrab oladi.
Vaqt qatorlari ma'lumotlarini o'zlashtirish: Python va InfluxDB integratsiyasi bo'yicha to'liq qo'llanma
Bugungi kunda ma'lumotlarga asoslangan dunyoda, ko'plab sohalarda ma'lum bir turdagi ma'lumotlar tobora muhim ahamiyat kasb etmoqda: vaqt qatorlari ma'lumotlari. DevOps konveyerida server metrikalarini kuzatishdan va IoT tarmog'ida sensor ko'rsatkichlarini kuzatishdan tortib moliya bozorlarida aksiya narxlarini tahlil qilishgacha, vaqt belgisi bilan bog'liq ma'lumotlar nuqtalari hamma joyda mavjud. Biroq, bu ma'lumotlarni samarali boshqarish, an'anaviy relyatsion ma'lumotlar bazalari hal qilish uchun mo'ljallanmagan o'ziga xos qiyinchiliklarni keltirib chiqaradi.
Aynan shu yerda maxsus vaqt qatorlari ma'lumotlar bazalari (TSDB) yordamga keladi. Ushbu sohadagi yetakchilardan biri bu InfluxDB — vaqt belgilari bilan belgilangan ma'lumotlarni qayta ishlash uchun maxsus yaratilgan yuqori unumdorlikka ega, ochiq manbali ma'lumotlar bazasi. Pythonning ko'p qirraliligi va kuchli ma'lumotlar ilmi ekotizimi bilan birlashganda, u kengaytiriladigan va chuqur tushuncha beruvchi vaqt qatorlari ilovalarini yaratish uchun nihoyatda mustahkam to'plamni hosil qiladi.
Ushbu keng qamrovli qo'llanma sizga Pythonni InfluxDB bilan integratsiya qilish uchun bilishingiz kerak bo'lgan hamma narsani ko'rsatib beradi. Biz fundamental tushunchalar, muhitni sozlash, ma'lumotlarni yozish va so'rash, amaliy real misol va ishlab chiqarishga tayyor tizimlarni yaratish uchun muhim eng yaxshi amaliyotlarni qamrab olamiz. Siz ma'lumotlar muhandisi, DevOps mutaxassisi yoki ma'lumotlar olimi bo'lishingizdan qat'i nazar, ushbu maqola sizni vaqt qatorlari ma'lumotlarini o'zlashtirish uchun kerakli ko'nikmalar bilan ta'minlaydi.
Asosiy tushunchalarni anglash
Kod yozishga kirishishdan oldin, InfluxDBning asosiy tushunchalarini tushunish juda muhim. Bu sizga samarali ma'lumotlar sxemasini loyihalash va samarali so'rovlar yozishga yordam beradi.
InfluxDB nima?
InfluxDB - bu vaqt qatorlari ma'lumotlarini tez, yuqori darajada mavjud saqlash va olish uchun optimallashtirilgan ma'lumotlar bazasi. PostgreSQL yoki MySQL kabi umumiy maqsadli ma'lumotlar bazalaridan farqli o'laroq, InfluxDBning ichki arxitekturasi vaqt qatorlari ish yuklarining o'ziga xos naqshlarini - ya'ni yuqori hajmli yozuvlar va vaqtga yo'naltirilgan so'rovlarni boshqarish uchun boshidan ishlab chiqilgan.
U ikkita asosiy versiyada mavjud:
- InfluxDB OSS: O'z infratuzilmangizda joylashtirishingiz mumkin bo'lgan ochiq manbali versiya.
- InfluxDB Cloud: To'liq boshqariladigan, ko'p bulutli ma'lumotlar bazasi-xizmat (DBaaS) taklifi.
Ushbu qo'llanma uchun biz misollarimizda mahalliy OSS nusxasidan foydalanib, ikkalasiga ham tegishli bo'lgan tushunchalarga e'tibor qaratamiz.
InfluxDB'ning asosiy terminologiyasi
InfluxDB o'zining ma'lumotlar modeli va terminologiyasiga ega. Ushbu atamalarni tushunish uni samarali ishlatishning birinchi qadamidir.
- Data Point (Ma'lumotlar nuqtasi): InfluxDBdagi ma'lumotlarning asosiy birligi. Bitta ma'lumotlar nuqtasi to'rtta komponentdan iborat:
- Measurement (O'lchov): Ma'lumotlaringiz uchun konteyner vazifasini o'taydigan satr, SQLdagi jadval nomiga o'xshaydi. Masalan,
cpu_usageyokitemperature_readings. - Tag Set (Teglar to'plami): Ma'lumotlar haqidagi metama'lumotlarni saqlaydigan kalit-qiymat juftliklari (ikkalasi ham satrlar) to'plami. Teglar indekslanadi, bu ularni so'rovlarda filtrlash va guruhlash uchun ideal qiladi. Misollar:
host=server_A,region=us-east-1,sensor_id=T-1000. - Field Set (Maydonlar to'plami): Haqiqiy ma'lumot qiymatlarini ifodalovchi kalit-qiymat juftliklari to'plami. Maydon qiymatlari butun sonlar, suzuvchi nuqtali sonlar, mantiqiy qiymatlar yoki satrlar bo'lishi mumkin. Maydonlar indekslanmaydi, shuning uchun ularni so'rovning `WHERE` bandlarida ishlatish samarali emas. Misollar:
value=98.6,load=0.75,is_critical=false. - Timestamp (Vaqt belgisi): Ma'lumotlar nuqtasi bilan bog'liq vaqt belgisi, nanosekund aniqligida. Bu InfluxDBdagi barcha ma'lumotlarning markaziy tashkiliy tamoyilidir.
- Measurement (O'lchov): Ma'lumotlaringiz uchun konteyner vazifasini o'taydigan satr, SQLdagi jadval nomiga o'xshaydi. Masalan,
- Bucket: Ma'lumotlar saqlanadigan nomlangan joy. Bu an'anaviy RDBMSdagi 'ma'lumotlar bazasi'ga o'xshaydi. Bucket saqlash siyosatiga (retention policy) ega, bu ma'lumotlar qancha vaqt saqlanishini belgilaydi.
- Organization (Tashkilot): Foydalanuvchilar guruhi uchun ish maydoni. Bucketlar, boshqaruv panellari va vazifalar kabi barcha resurslar tashkilotga tegishli.
Buni shunday tasavvur qiling: agar siz harorat ma'lumotlarini yozayotgan bo'lsangiz, sizning measurementingiz `environment_sensors` bo'lishi mumkin. Teglar ma'lumotni qaerdan va nima yaratganini tavsiflash uchun `location=lab_1` va `sensor_type=DHT22` bo'lishi mumkin. Maydonlar esa haqiqiy ko'rsatkichlar bo'ladi, masalan, `temperature=22.5` va `humidity=45.1`. Va albatta, har bir ko'rsatkich o'zining noyob timestampiga ega bo'ladi.
Muhitingizni sozlash
Endi, keling, ishga kirishaylik va kerakli vositalarni sozlaylik. Tez va global miqyosda izchil InfluxDB sozlamasi uchun Docker'dan foydalanamiz.
InfluxDB'ni Docker yordamida o'rnatish
Docker xizmatlarni ishga tushirish uchun toza, izolyatsiya qilingan muhitni ta'minlaydi. Agar sizda Docker o'rnatilmagan bo'lsa, operatsion tizimingiz uchun rasmiy hujjatlarga murojaat qiling.
InfluxDB 2.x konteynerini ishga tushirish uchun terminalingizni oching va quyidagi buyruqni bajaring:
docker run --name influxdb -p 8086:8086 influxdb:latest
Ushbu buyruq eng so'nggi InfluxDB tasvirini yuklab oladi, `influxdb` nomli konteynerni ishga tushiradi va mahalliy mashinangizdagi 8086-portni konteyner ichidagi 8086-portga bog'laydi. Bu InfluxDB API uchun standart port.
InfluxDB'ning dastlabki sozlamalari
Konteyner ishga tushgandan so'ng, veb-brauzeringizda http://localhost:8086 manziliga o'tish orqali InfluxDB foydalanuvchi interfeysiga (UI) kirishingiz mumkin.
- Sizni "InfluxDB'ga xush kelibsiz" sozlash ekrani kutib oladi. "Boshlash" (Get Started) tugmasini bosing.
- Foydalanuvchi sozlamalari: Sizdan dastlabki foydalanuvchini yaratish so'raladi. Foydalanuvchi nomi va parolni kiriting.
- Dastlabki tashkilot va bucket: Asosiy tashkilotingiz (masalan, `my-org`) va birinchi bucketingiz (masalan, `my-bucket`) uchun nom bering.
- Tokeningizni saqlang: Sozlashni tugatgandan so'ng, InfluxDB sizning dastlabki admin tokeningizni ko'rsatadi. Bu juda muhim! Ushbu tokenni nusxalash va xavfsiz joyda saqlash kerak. Sizga Python skriptingizdan ma'lumotlar bazasi bilan ishlash uchun kerak bo'ladi.
Sozlashdan so'ng, siz asosiy InfluxDB boshqaruv paneliga o'tasiz. Endi siz unga Python'dan ulanishga tayyorsiz.
Python mijoz kutubxonasini o'rnatish
InfluxDB 2.x va Cloud uchun rasmiy Python mijoz kutubxonasi `influxdb-client` hisoblanadi. Uni o'rnatish uchun pip'dan foydalaning:
pip install influxdb-client
Ushbu kutubxona InfluxDB nusxangizni dasturiy ravishda yozish, so'rash va boshqarish uchun barcha kerakli vositalarni ta'minlaydi.
Python yordamida ma'lumotlarni yozish
Muhitimiz tayyor bo'lgach, keling, Python yordamida InfluxDB'ga ma'lumotlarni yozishning turli usullarini ko'rib chiqaylik. Ma'lumotlarni samarali yozish, ayniqsa yuqori o'tkazuvchanlikka ega ilovalarda ishlash unumdorligi uchun juda muhimdir.
InfluxDB'ga ulanish
Har qanday skriptdagi birinchi qadam ulanishni o'rnatishdir. Sizga URL, tashkilotingiz nomi va avvalroq saqlagan tokeningiz kerak bo'ladi.
Eng yaxshi amaliyot - tokenlar kabi maxfiy ma'lumotlarni skriptingizda qattiq kodlash o'rniga muhit o'zgaruvchilarida saqlashdir. Biroq, ushbu misolda, aniqlik uchun ularni o'zgaruvchilar sifatida belgilaymiz.
import influxdb_client
from influxdb_client.client.write_api import SYNCHRONOUS
# --- Ulanish tafsilotlari ---
url = "http://localhost:8086"
token = "YOUR_SUPER_SECRET_TOKEN" # O'zingizning haqiqiy tokeningiz bilan almashtiring
org = "my-org"
bucket = "my-bucket"
# --- Mijozni yaratish ---
client = influxdb_client.InfluxDBClient(url=url, token=token, org=org)
# --- Yozish API'sini olish ---
# SYNCHRONOUS rejimi ma'lumotlarni darhol yozadi. Yuqori o'tkazuvchanlik uchun ASYNCHRONOUS'ni ko'rib chiqing.
write_api = client.write_api(write_options=SYNCHRONOUS)
print("InfluxDB'ga muvaffaqiyatli ulanildi!")
Bitta ma'lumotlar nuqtasini tuzish va yozish
Mijoz kutubxonasi `Point` obyektini taqdim etadi, bu sizning ma'lumotlaringizni InfluxDB ma'lumotlar modeliga muvofiq tuzishning qulay usuli.
Keling, serverning CPU yuklamasini ifodalovchi bitta ma'lumotlar nuqtasini yozaylik.
from influxdb_client import Point
import time
# Yengil API yordamida ma'lumotlar nuqtasini yaratish
point = (
Point("system_metrics")
.tag("host", "server-alpha")
.tag("region", "eu-central-1")
.field("cpu_load_percent", 12.34)
.field("memory_usage_mb", 567.89)
.time(int(time.time_ns())) # Nanosekund aniqligidagi vaqt belgisidan foydalaning
)
# Nuqtani bucket'ga yozish
write_api.write(bucket=bucket, org=org, record=point)
print(f"'{bucket}'ga bitta nuqta yozildi.")
Ushbu misolda, `system_metrics` o'lchov, `host` va `region` teglar, `cpu_load_percent` va `memory_usage_mb` esa maydonlardir. Biz InfluxDB'ning tabiiy aniqligi bo'lgan nanosekund aniqligi bilan joriy vaqt belgisini olish uchun `time.time_ns()` dan foydalanamiz.
Unumdorlik uchun to'plab yozish
Ma'lumotlar nuqtalarini birma-bir yozish samarasiz va keraksiz tarmoq yuklamasini yaratadi. Har qanday real ilova uchun yozuvlaringizni to'plab amalga oshirishingiz kerak. `write_api` `Point` obyektlari ro'yxatini qabul qila oladi.
Keling, bir nechta sensor ko'rsatkichlarini to'plashni va ularni bitta to'plamda yozishni simulyatsiya qilaylik.
points = []
# Ikkita turli sensordan 5 ta o'lchovni simulyatsiya qilish
for i in range(5):
# Sensor 1
point1 = (
Point("environment")
.tag("sensor_id", "A001")
.tag("location", "greenhouse-1")
.field("temperature", 25.1 + i * 0.1)
.field("humidity", 60.5 + i * 0.2)
.time(int(time.time_ns()) - i * 10**9) # Vaqt belgilarini 1 soniyaga farqlash
)
points.append(point1)
# Sensor 2
point2 = (
Point("environment")
.tag("sensor_id", "B002")
.tag("location", "greenhouse-2")
.field("temperature", 22.8 + i * 0.15)
.field("humidity", 55.2 - i * 0.1)
.time(int(time.time_ns()) - i * 10**9)
)
points.append(point2)
# Nuqtalar to'plamini to'liq yozish
write_api.write(bucket=bucket, org=org, record=points)
print(f"'{bucket}'ga {len(points)} ta nuqtadan iborat to'plam yozildi.")
Ushbu yondashuv InfluxDB API'siga qilingan HTTP so'rovlari sonini kamaytirish orqali yozish o'tkazuvchanligini sezilarli darajada yaxshilaydi.
Pandas DataFrame'laridan ma'lumotlarni yozish
Ma'lumotlar olimlari va tahlilchilar uchun Pandas tanlangan vositadir. `influxdb-client` kutubxonasi ma'lumotlarni to'g'ridan-to'g'ri Pandas DataFrame'dan yozish uchun birinchi darajali qo'llab-quvvatlashga ega, bu esa nihoyatda kuchli.
Mijoz DataFrame ustunlarini avtomatik ravishda o'lchovlar, teglar, maydonlar va vaqt belgilariga moslashtirishi mumkin.
import pandas as pd
import numpy as np
# Namuna DataFrame yaratish
now = pd.Timestamp.now(tz='UTC')
dates = pd.to_datetime([now - pd.Timedelta(minutes=i) for i in range(10)])
data = {
'price': np.random.uniform(100, 110, 10),
'volume': np.random.randint(1000, 5000, 10),
'symbol': 'XYZ',
'exchange': 'GLOBALEX'
}
df = pd.DataFrame(data=data, index=dates)
# DataFrame vaqt mintaqasini biladigan DatetimeIndex'ga ega bo'lishi kerak
print("Namuna DataFrame:")
print(df)
# DataFrame'ni InfluxDB'ga yozish
# data_frame_measurement_name: Ishlatiladigan o'lchov nomi
# data_frame_tag_columns: Teglar sifatida qaraladigan ustunlar
write_api.write(
bucket=bucket,
record=df,
data_frame_measurement_name='stock_prices',
data_frame_tag_columns=['symbol', 'exchange']
)
print(f"\nDataFrame '{bucket}' bucketidagi 'stock_prices' o'lchoviga yozildi.")
# Mijozni yopishni unutmang
client.close()
Ushbu misolda, DataFrame indeksi avtomatik ravishda vaqt belgisi sifatida ishlatiladi. Biz `symbol` va `exchange` ustunlari teglar bo'lishi kerakligini belgilaymiz va qolgan raqamli ustunlar (`price` va `volume`) maydonlarga aylanadi.
Python va Flux yordamida ma'lumotlarni so'rash
Ma'lumotlarni saqlash - bu jangning yarmi. Haqiqiy kuch uni so'rash va tahlil qilish qobiliyatidan kelib chiqadi. InfluxDB 2.x Flux deb nomlangan kuchli ma'lumotlar skriptlash tilidan foydalanadi.
Flux bilan tanishuv
Flux - bu vaqt qatorlari ma'lumotlarini so'rash, tahlil qilish va ular bilan ishlash uchun mo'ljallangan funksional til. U funksiyalarni zanjirga bog'lash uchun pipe-forward operatoridan (`|>`) foydalanadi, bu ham o'qilishi oson, ham ifodali bo'lgan ma'lumotlarni qayta ishlash konveyerini yaratadi.
Oddiy Flux so'rovi shunday ko'rinadi:
from(bucket: "my-bucket")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "system_metrics")
|> filter(fn: (r) => r.host == "server-alpha")
Ushbu so'rov `my-bucket`dan ma'lumotlarni tanlaydi, uni so'nggi bir soatga filtrlaydi va keyin ma'lum bir o'lchov va host tegi uchun qo'shimcha filtrlaydi.
Python'da birinchi Flux so'rovingiz
Ma'lumotlarni so'rash uchun siz mijozingizdan `QueryAPI` obyektini olishingiz kerak.
# --- So'rov uchun ulanishni qayta tiklash ---
client = influxdb_client.InfluxDBClient(url=url, token=token, org=org)
query_api = client.query_api()
# --- Flux so'rovini aniqlash ---
flux_query = f'''
from(bucket: "{bucket}")
|> range(start: -10m)
|> filter(fn: (r) => r._measurement == "environment")
'''
# --- So'rovni bajarish ---
result_tables = query_api.query(query=flux_query, org=org)
print("So'rov bajarildi. Natijalar qayta ishlanmoqda...")
So'rov natijalarini qayta ishlash
Flux so'rovining natijasi - bu jadvallar oqimi. Har bir jadval ma'lumotlar nuqtalarining noyob guruhini (o'lchov, teglar va boshqalar bo'yicha guruhlangan) ifodalaydi. Siz ushbu jadvallar va ularning yozuvlari orqali iteratsiya qilishingiz mumkin.
# Jadvallar orqali iteratsiya qilish
for table in result_tables:
print(f"--- Jadval (teglar uchun seriya: {table.records[0].values}) ---")
# Har bir jadvaldagi yozuvlar orqali iteratsiya qilish
for record in table.records:
print(f"Vaqt: {record.get_time()}, Maydon: {record.get_field()}, Qiymat: {record.get_value()}")
print("\nSo'rov natijalarini qayta ishlash tugadi.")
Ushbu xom qayta ishlash maxsus mantiq uchun foydalidir, ammo ma'lumotlarni tahlil qilish uchun ma'lumotlarni to'g'ridan-to'g'ri tanish tuzilishga olish ko'pincha qulayroqdir.
Kengaytirilgan so'rovlar: Agregatsiya va transformatsiya
Flux agregatsiyalarni bajarganingizda o'zining haqiqiy kuchini namoyon qiladi. Keling, avvalroq yozgan `environment` ma'lumotlari uchun har 2 daqiqada o'rtacha haroratni topaylik.
flux_aggregate_query = f'''
from(bucket: "{bucket}")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "environment")
|> filter(fn: (r) => r._field == "temperature")
|> window(every: 2m)
|> mean()
|> yield(name: "mean_temperature")
'''
# Bajarish va qayta ishlash
aggregated_results = query_api.query(query=flux_aggregate_query, org=org)
print("\n--- Agregatlangan natijalar (har 2 daqiqadagi o'rtacha harorat) ---")
for table in aggregated_results:
for record in table.records:
print(f"Vaqt oralig'i tugashi: {record.get_time()}, O'rtacha harorat: {record.get_value():.2f}")
Bu yerda, `window(every: 2m)` ma'lumotlarni 2 daqiqalik intervallarga guruhlaydi va `mean()` har bir oyna uchun o'rtacha qiymatni hisoblaydi.
To'g'ridan-to'g'ri Pandas DataFrame'ga so'rov yuborish
InfluxDB'ni Python ma'lumotlar ilmi to'plami bilan integratsiya qilishning eng uzluksiz usuli - bu to'g'ridan-to'g'ri Pandas DataFrame'ga so'rov yuborish. `query_api` buning uchun maxsus metodga ega: `query_data_frame()`.
# --- Aksiya narxlarini DataFrame'ga so'rash ---
flux_df_query = f'''
from(bucket: "{bucket}")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "stock_prices")
|> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
'''
# So'rovni bajarish
df_result = query_api.query_data_frame(query=flux_df_query, org=org)
# Natijada ortiqcha ustunlar bo'lishi mumkin, keling, uni tozalaymiz
if not df_result.empty:
df_result = df_result[['_time', 'symbol', 'price', 'volume']]
df_result.set_index('_time', inplace=True)
print("\n--- Pandas DataFrame sifatida so'rov natijasi ---")
print(df_result)
else:
print("\nSo'rov hech qanday ma'lumot qaytarmadi.")
client.close()
Bu yerda Flux'dagi `pivot()` funksiyasi juda muhim. U ma'lumotlarni InfluxDB'ning uzun formatidan (har bir maydon uchun bir qator) keng formatga (har bir maydon uchun ustunlar), ya'ni DataFrame'da odatda kutiladigan formatga o'zgartiradi. Ma'lumotlar endi Pandas'da bo'lgani uchun, vizualizatsiya va mashinani o'rganish uchun Matplotlib, Seaborn yoki scikit-learn kabi kutubxonalardan foydalanishingiz mumkin.
Amaliy foydalanish holati: Tizim metrikalarini kuzatish
Keling, hamma narsani amaliy misol bilan bog'laylik: mahalliy tizim metrikalarini (CPU va xotira) kuzatadigan va ularni InfluxDB'ga yozadigan Python skripti.
Birinchidan, sizga `psutil` kutubxonasi kerak bo'ladi:
pip install psutil
Monitoring skripti
Ushbu skript cheksiz ishlaydi va har 10 soniyada ma'lumotlarni to'playdi va yozadi.
import influxdb_client
from influxdb_client import Point
from influxdb_client.client.write_api import SYNCHRONOUS
import psutil
import time
import socket
# --- Konfiguratsiya ---
url = "http://localhost:8086"
token = "YOUR_SUPER_SECRET_TOKEN" # Tokeningiz bilan almashtiring
org = "my-org"
bucket = "monitoring"
# Teg sifatida ishlatish uchun xost nomini olish
hostname = socket.gethostname()
# --- Asosiy monitoring tsikli ---
def monitor_system():
print("Tizim monitorini ishga tushirish...")
with influxdb_client.InfluxDBClient(url=url, token=token, org=org) as client:
write_api = client.write_api(write_options=SYNCHRONOUS)
while True:
try:
# Metrikalarni olish
cpu_percent = psutil.cpu_percent(interval=1)
memory_percent = psutil.virtual_memory().percent
# Ma'lumotlar nuqtalarini yaratish
cpu_point = (
Point("system_stats")
.tag("host", hostname)
.field("cpu_usage_percent", float(cpu_percent))
)
memory_point = (
Point("system_stats")
.tag("host", hostname)
.field("memory_usage_percent", float(memory_percent))
)
# To'plamni yozish
write_api.write(bucket=bucket, org=org, record=[cpu_point, memory_point])
print(f"Yozildi CPU: {cpu_percent}%, Xotira: {memory_percent}%")
# Keyingi intervalni kutish
time.sleep(10)
except KeyboardInterrupt:
print("\nMonitoring foydalanuvchi tomonidan to'xtatildi.")
break
except Exception as e:
print(f"Xatolik yuz berdi: {e}")
time.sleep(10) # Qayta urinishdan oldin kutish
if __name__ == "__main__":
# Eslatma: Siz avval InfluxDB UI'da 'monitoring' bucketini yaratishingiz kerak bo'lishi mumkin.
monitor_system()
Ma'lumotlarni vizualizatsiya qilish
Ushbu skriptni bir necha daqiqa ishlatgandan so'ng, `http://localhost:8086` manzilidagi InfluxDB UI'ga qayting. Data Explorer (yoki Explore) yorlig'iga o'ting. UI quruvchisidan foydalanib, `monitoring` bucketini, `system_stats` o'lchovini va vizualizatsiya qilmoqchi bo'lgan maydonlarni tanlang. Siz Python skriptingiz tomonidan quvvatlanadigan tizimingizning CPU va xotira ishlatilishining jonli grafigini ko'rasiz!
Eng yaxshi amaliyotlar va ilg'or mavzular
Mustahkam va kengaytiriladigan tizimlarni yaratish uchun ushbu eng yaxshi amaliyotlarga amal qiling.
Sxema dizayni: Teglar va maydonlar
- So'rov beradigan metama'lumotlar uchun teglardan foydalaning. Teglar indekslanadi, bu ularda `filter()` operatsiyalarini juda tez bajaradi. Teglar uchun yaxshi nomzodlar xost nomlari, mintaqalar, sensor ID'lari yoki o'lchovlaringizni tavsiflovchi har qanday pastdan o'rtacha kardinallikka ega ma'lumotlardir.
- Xom ma'lumot qiymatlari uchun maydonlardan foydalaning. Maydonlar indekslanmaydi, shuning uchun maydon qiymati bo'yicha filtrlash ancha sekinroq. Deyarli har bir ma'lumotlar nuqtasi bilan o'zgaradigan har qanday qiymat (harorat yoki narx kabi) maydon bo'lishi kerak.
- Kardinallik kalit hisoblanadi. Teglardagi yuqori kardinallik (ko'p sonli noyob qiymatlar, masalan, katta tizimdagi foydalanuvchi ID'si) unumdorlik muammolariga olib kelishi mumkin. Sxemangizni loyihalashda buni yodda tuting.
Xatoliklarni boshqarish va chidamlilik
Tarmoq ulanishlari ishdan chiqishi mumkin. Mumkin bo'lgan istisnolarni yaxshi boshqarish uchun yozish va so'rov chaqiruvlaringizni har doim `try...except` bloklariga o'rang. `influxdb-client` shuningdek, ko'proq chidamlilik uchun sozlashingiz mumkin bo'lgan o'rnatilgan qayta urinish strategiyalarini o'z ichiga oladi.
Xavfsizlik: Tokenlarni boshqarish
- Hech qachon tokenlarni manba kodingizda qattiq kodlamang. Muhit o'zgaruvchilaridan yoki HashiCorp Vault yoki AWS Secrets Manager kabi sirlarni boshqarish xizmatidan foydalaning.
- Aniq ruxsatli tokenlardan foydalaning. InfluxDB UI'da, API Tokens bo'limida, siz aniq ruxsatlarga ega yangi tokenlar yaratishingiz mumkin. Faqat ma'lumotlarni yozadigan ilova uchun, ma'lum bir bucketga faqat yozish huquqiga ega bo'lgan token yarating. Bu eng kam imtiyoz tamoyiliga amal qiladi.
Ma'lumotlarni saqlash siyosatlari
Vaqt qatorlari ma'lumotlari nihoyatda tez o'sishi mumkin. InfluxDB'ning saqlash siyosatlari belgilangan muddatdan eski ma'lumotlarni avtomatik ravishda o'chiradi. Ma'lumotlaringizning hayot aylanishini rejalashtiring: siz yuqori aniqlikdagi ma'lumotlarni 30 kun saqlashingiz mumkin, lekin kamaytirilgan, agregatlangan ma'lumotlarni (masalan, kunlik o'rtacha qiymatlar) boshqa bucketda cheksiz saqlashingiz mumkin.
Xulosa
Python va InfluxDB kombinatsiyasi har qanday vaqt qatorlari ma'lumotlari muammosini hal qilish uchun qudratli platformani taqdim etadi. Biz InfluxDB ma'lumotlar modelining asosiy tushunchalaridan boshlab, rasmiy Python mijozi yordamida ma'lumotlarni yozish va so'rash amaliyotlarigacha bo'lgan sayohatni bosib o'tdik. Siz bitta nuqtalarni yozishni, unumdorlik uchun ma'lumotlarni to'plashni va kuchli Pandas kutubxonasi bilan uzluksiz integratsiya qilishni o'rgandingiz.
Sxema dizayni, xavfsizlik va xatoliklarni boshqarish bo'yicha eng yaxshi amaliyotlarga rioya qilish orqali siz endi kengaytiriladigan, chidamli va chuqur tushuncha beruvchi ilovalarni yaratish uchun yaxshi jihozlangansiz. Vaqt qatorlari ma'lumotlari dunyosi keng va endi sizda uni o'rganish uchun asosiy vositalar mavjud.
Sayohatning keyingi bosqichlari avtomatlashtirilgan pastga namuna olish uchun InfluxDB vazifalar mexanizmini o'rganish, anomaliyalarni aniqlash uchun ogohlantirishlarni sozlash yoki Grafana kabi vizualizatsiya vositalari bilan integratsiya qilishni o'z ichiga olishi mumkin. Imkoniyatlar cheksizdir. Vaqt qatorlari ilovalaringizni bugun yaratishni boshlang!